跳到主要内容

Python IO 模块

文件操作

打开文件

在 Python 中使用文件的关键函数是 open() 函数

open() 函数有两个参数:文件名和模式。

有四种打开文件的不同方法(模式):

"r" - 读取 - 默认值。打开文件进行读取,如果文件不存在则报错。 "a" - 追加 - 打开供追加的文件,如果不存在则创建该文件。 "w" - 写入 - 打开文件进行写入,如果文件不存在则创建该文件。 "x" - 创建 - 创建指定的文件,如果文件存在则返回错误。 此外,可以指定文件是应该作为二进制还是文本模式进行处理。 r+ - 在 r 的基础上增加了可写功能 w+ - 在 w 的基础上增加了可读功能 a+ - 在 a 的基础上增加了可读功能

"t" - 文本 - 默认值。文本模式。 "b" - 二进制 - 二进制模式(例如图像)。

实例:

f = open("demofile.txt")
# 等价于
f = open("demofile.txt", "rt")

文件 I/O 操作

# 打开一个文件
fo = open("foo.txt", "w")
print "文件名: ", fo.name
print "是否已关闭 : ", fo.closed
print "访问模式 : ", fo.mode
print "末尾是否强制加空格 : ", fo.softspace

file 类的 方法

方法描述
flush()刷新缓冲区数据,将缓冲区中的数据立刻写入文件
next()返回文件下一行,这个方法也是file对象实例可以被当做迭代器使用的原因
truncate([size])截取文件中指定字节数的内容,并覆盖保存到文件中,如果不指定size参数则文件将被清空; Python2无返回值,Python3返回新文件的内容字节数
write(str)将字符串写入文件,没有返回值
writelines(sequence)向文件写入一个字符串或一个字符串列表,如果字符串列表中的元素需要换行要自己加入换行符
fileno()返回一个整型的文件描述符,可以用于一些底层IO操作上(如,os模块的read方法)
isatty()判断文件是否被连接到一个虚拟终端,是则返回True,否则返回False

关闭文件

# 关闭文件
f.close()

读取文件

需要先打开才能读取文件

f = open("demofile.txt", "r")
print(f.read())

# 读取不同编码的文件(例如下面这个文件就是 gbk 的)
# 使用 encoding 设置编码为 utf-8
print(open("./temp.txt", "r", encoding='UTF-8').read())


# 只读取部分
print(f.read(5)) # 只读取前 5个字符

# 读取文件中的一行
print(f.readline())
print(f.readline()) # 再调用一次就可以读取第二行了

# 遍历行(逐行读取整个文件)
f = open("demofile.txt", "r")
for x in f:
print(x)

# 关闭文件
f.close()

写入文件

open() 加上下面两个参数

"a" - 追加 - 会追加到文件的末尾 "w" - 写入 - 会覆盖任何已有的内容

f = open("demofile2.txt", "a")
f.write("Now the file has more content!")
f.close()

# 追加后,打开并读取该文件:
f = open("demofile2.txt", "r")
print(f.read())


# 不同编码的文件同理
f = open("./temp.txt", "a", encoding='UTF-8')
print(f.write('\n\n\n这是写入的内容!!!'))

创建文件

如需在 Python 中创建新文件,使用 open() 方法,并使用以下参数之一:

"x" - 创建 - 将创建一个文件,如果文件存在则返回错误 "a" - 追加 - 如果指定的文件不存在,将创建一个文件 "w" - 写入 - 如果指定的文件不存在,将创建一个文件

# 创建名为 "myfile.txt" 的文件:
f = open("myfile.txt", "x")

删除文件

删除文件比较特殊,需要导入 OS 模块

import os
os.remove("demofile.txt")

# 先检查是否存在
import os
if os.path.exists("demofile.txt"):
os.remove("demofile.txt")
else:
print("The file does not exist")

# 删除文件夹(但是只能删除空的,所以有点鸡肋)
import os
os.rmdir("myfolder")

dir()

dir() 函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。

如果参数包含方法 __dir__(),该方法将被调用。如果参数不包含 __dir__(),该方法将最大限度地收集参数信息。

dir([object])

# 例如打印请求
print(dir(response))